home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Source Code / Visual Basic Source Code.iso / vbsource / vbdatabs / as2htm.cpp < prev    next >
C/C++ Source or Header  |  1999-03-30  |  7KB  |  217 lines

  1. // ------------------------------- //
  2. // -------- Start of File -------- //
  3. // ------------------------------- //
  4. // ----------------------------------------------------------- // 
  5. // C++ Source Code File Name: as2htm.cpp 
  6. // Compiler Used: MSVC40, DJGPP 2.7.2.1, GCC 2.7.2.1, HP CPP 10.24
  7. // Produced By: gaer@nhc.noaa.gov
  8. // File Creation Date: 03/09/1999 
  9. // Date Last Modified: 03/31/1999
  10. // ----------------------------------------------------------- // 
  11. // ------------- Program description and details ------------- // 
  12. // ----------------------------------------------------------- // 
  13. /*
  14. THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND.
  15. THE ENTIRE RISK OF THE QUALITY AND PERFORMANCE OF THIS SOFTWARE
  16. IS WITH YOU. SHOULD ANY ELEMENT OF THIS SOFTWARE PROVE DEFECTIVE,
  17. YOU WILL ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR, OR
  18. CORRECTION.
  19.   
  20. This program is used to convert text file to HTML files.
  21. */
  22. // ----------------------------------------------------------- // 
  23. #include <stdio.h>
  24. #include <string.h>
  25. #include <stdlib.h>
  26. #include <fstream.h>
  27. #include <iostream.h>
  28. #include "htmldrv.h"
  29.  
  30. // Version number and program name
  31. const double AS2HTMVersionNumber = 1031.101;
  32. const char *ProgramName = "as2htm";
  33.  
  34. // Program globals
  35. const int MAX_LEN = 1024; // Maximum length of fixed strings
  36. char out_file[MAX_LEN];   // HTML file created from text file
  37. int write_to_file = 0;    // Write the output to a file instead of stdout
  38. char *open_file = 0;      // Name of text file currently opened
  39. unsigned num_files = 0;   // Total number of files processed
  40. int use_html_ext = 0;     // Use HTML file extension instead of .htm
  41. int use_header = 0;       // Write document header and trailer
  42. int use_comments = 0;     // Write comments to the HTML file
  43.  
  44. void HelpMessage(const char *program_name, const double version_number)
  45. {
  46.   char vbuffer[255];
  47.   sprintf(vbuffer, "%.3f", version_number);
  48.   cout << endl;
  49.   cout << program_name << " program version "
  50.        << vbuffer  << endl;
  51.   cout << "Usage: " << program_name << " [switches] infile.txt " << endl; 
  52.   cout << "Switches: " << endl;
  53.   cout << "          -c = Write comments in html file." << endl;
  54.   cout << "          -f = Write output to file: infile.txt = infile.htm"
  55.        << endl;
  56.   cout << "          -h = Write a document header and trailer." << endl;
  57.   cout << "          -l = Use .html file extension, defaults to .htm" << endl;
  58.   cout << endl;
  59.   exit(0);
  60. }
  61.  
  62. int ProcessArgs(char *arg)
  63. {
  64.   switch(arg[1]) {
  65.     case 'c':
  66.       use_comments = 1;
  67.       break;
  68.       
  69.     case 'f':
  70.       write_to_file = 1;
  71.       break;
  72.  
  73.     case 'h':
  74.       use_header = 1;
  75.       break;
  76.       
  77.     case 'l':
  78.       use_html_ext = 1;
  79.       break;
  80.  
  81.  
  82.     default:
  83.       cerr << endl;
  84.       cerr << "Unknown switch " << arg << endl;
  85.       cerr << "Exiting..." << endl;
  86.       cerr << endl;
  87.       return 0;
  88.   }
  89.   arg[0] = '\0';
  90.   return 1; // All command line arguments were valid
  91. }
  92.  
  93. void ProcessTextFile(fstream &infile, ostream &stream)
  94. {
  95.   unsigned char c;
  96.   HyperText htm(stream);
  97.  
  98.   
  99.   if(use_comments) {
  100.     char date[255]; htm.GetSystemTime(date);
  101.     htm << comment << "HTML file generated by: " << ProgramName << " version ";
  102.     htm.precision(3);
  103.     htm << AS2HTMVersionNumber << ecomment << endl;
  104.     htm << comment << "File Creation date: " << date << ecomment << endl;
  105.   }
  106.   
  107.   htm.Prologue(open_file);
  108.   htm.StartBody("BGCOLOR=\"#FFFFFF\"");
  109.  
  110.   if(use_header) htm.DocHeader(open_file);
  111.   
  112.   htm.FONT("FACE=\"Courier New\" SIZE=3");
  113.   htm << pre << endl;
  114.  
  115.   while(!infile.eof()) { // Read in the file line by line
  116.     infile.get(c);
  117.     if(!infile.eof()) // Get rid of EOF marker
  118.       htm << c;
  119.   }
  120.  
  121.   htm << endl << epre << efont << endl;
  122.  
  123.   if(use_header) htm.DocTrailer();
  124.   
  125.   htm.Epilogue();
  126. }
  127.  
  128. int GenOutputFileName(char *extension)
  129. // Generate a name for the output file using the open_file
  130. // name with the specified dot extension.
  131. {
  132.   unsigned i = 0;
  133.   for(i = 0; i < MAX_LEN; i++) out_file[i] = '\0';
  134.   char *p = open_file;
  135.   unsigned len = strlen(p);
  136.   for(i = 0; i < len && i != MAX_LEN; i++, p++) {
  137.     if(*p == '.') break;
  138.     out_file[i] = *p;
  139.   }
  140.   if((strlen(out_file) + strlen(extension)) > (MAX_LEN - 1)) return 0;
  141.   strcat(out_file, extension); // Add the file extension (.xxx)
  142.   return 1;
  143. }
  144.  
  145. // Program's main thread of execution.
  146. // ----------------------------------------------------------- 
  147. int main(int argc,     // Number of strings in array argv.
  148.      char *argv[]) // Array of command-line argument 
  149. // NOTE: None of the MSVC compilers will expand wildcard characters
  150. // used in command-line arguments unless linked with the setargv.obj
  151. // library. All the UNIX compliers will expand wildcard characters
  152. // by default.
  153. {
  154.   // If no arguments are given print usage message to the screen 
  155.   if(argc < 2) {
  156.     HelpMessage(ProgramName, AS2HTMVersionNumber);
  157.     return 0;
  158.   }
  159.  
  160.   // Process command ling arguments and files 
  161.   int narg;
  162.   char *arg = argv[narg = 1];
  163.   while (narg < argc) {
  164.     if (arg[0] != '\0') {
  165.       if (arg[0] == '-') { // Look for command line arguments
  166.     if(!ProcessArgs(arg)) return 0; // Exit if argument is not valid
  167.       }
  168.       else { 
  169.     open_file = arg; // Update the open file name pointer
  170.     fstream infile(open_file, ios::in|ios::nocreate);
  171.     if(!infile) {
  172.       cerr << endl;
  173.       cerr << "Cannot open file: " << open_file << endl;
  174.       cerr << "Exiting..." << endl;
  175.       cerr << endl;
  176.       return 0;
  177.     }
  178.     num_files++;
  179.  
  180.     // Process the test file
  181.     if(write_to_file) {
  182.       if(use_html_ext)
  183.         GenOutputFileName(".html");
  184.       else
  185.         GenOutputFileName(".htm");
  186.       fstream outfile(out_file, ios::out|ios::trunc);
  187.       if(!outfile) {
  188.         cerr << endl;
  189.         cerr << "Cannot write to: " << out_file << endl;
  190.         cerr << "Exiting..." << endl;
  191.         cerr << endl;
  192.         return 0;
  193.       }
  194.       ProcessTextFile(infile, outfile); // Write to file
  195.     }
  196.     else 
  197.       ProcessTextFile(infile, cout); // Write to stdout
  198.       }
  199.       arg = argv[++narg];
  200.     }
  201.   }
  202.   
  203.   if(num_files == 0) {
  204.     cerr << endl;
  205.     cerr << "You must enter a file name." << endl;
  206.     cerr << "Exiting..." << endl;
  207.     cerr << endl;
  208.     return 0;
  209.   }
  210.   
  211.   return 0;
  212. }
  213. // ----------------------------------------------------------- // 
  214. // ------------------------------- //
  215. // --------- End of File --------- //
  216. // ------------------------------- //
  217.